import axios from "axios";


// 方式一
// export function request(config, success, failure) {
//   // 1. 创建axios实例
//   const instance = axios.create({
//     baseURL: 'https://api.feast.jlyangchu.com',
//     timeout: 5000
//   })

//   // 发送正真的网络请求
//   instance(config).then(res => {
//     // console.log(res)
//     // 通过函数回调数据
//     success(res)
//   }).catch(err => {
//     // console.log(err)
//     // 通过函数回调数据
//     failure(err)
//   })
// }

// 方式二
// export function request(config) {
//   // 1. 创建axios实例
//   const instance = axios.create({
//     baseURL: 'https://api.feast.jlyangchu.com',
//     timeout: 5000
//   })

//   // 发送正真的网络请求
//   instance(config.baseConfig).then(res => {
//     // console.log(res)
//     // 通过函数回调数据
//     config.success(res)
//   }).catch(err => {
//     // console.log(err)
//     // 通过函数回调数据
//     config.failure(err)
//   })
// }


// 方式三
// export function request(config) {
//   return new Promise((resolve, reject) => {
//     //   // 1. 创建axios实例
//     const instance = axios.create({
//       baseURL: 'https://api.feast.jlyangchu.com',
//       timeout: 5000
//     })

//     // 发送正真的网络请求
//     instance(config)
//     .then(res => {
//       resolve(res)
//     })
//     .catch(err => {
//       reject(err)
//     })
//   })
// }

// 方式四  最终 的封装方式

export function request(config) {
  // 1. 创建axios实例
  const instance = axios.create({
    baseURL: 'https://api.feast.jlyangchu.com',
    timeout: 5000
  })

  // 2. axios的拦截器
  // 拦截请求
  instance.interceptors.request.use(con => {
    console.log(con);
    // 拦截后必须返回，不然不能拿到con
    return con
    // 请求拦截时做的操作
    // 1. 比如config中的一些信息不符合服务器要求
    // 2. 比如每次发送网络请求时，都希望在界面显示请求等待图标
    // 3. 某些网络请求（比如登录token），必须携带一些特殊的信息

  },err => {
    console.log(err)

  })
  // 拦截响应
  instance.interceptors.response.use(con => {
    console.log(con)
    return con.data
  },err => {
    console.log(err)
    
  })


  // 3.发送正真的网络请求  本身返回值就是 返回promise
  return instance(config)
}
